package thread;

public class T1 {
    public static void main(String args[]) throws Exception {
        //获取当前活动的线程，为主线程main
        Thread currentThread = Thread.currentThread();
        System.out.println(currentThread.getName() + "线程正在执行");
        //创建子线程对象st1
        calcPrimeThread st1 = new calcPrimeThread(1, 100);
        st1.setName("子线程1");//设置子线程st1 的名称
        st1.start();
        //启动子线程st1，使其处于就绪(可运行)状态Thread.sleep( millis: 2000);//主线程休眠(暂停)2秒
        //创建子线程对象st2
        calcPrimeThread st2 = new calcPrimeThread(300, 200);
        st2.setName("子线程2");//设置子线程st2的名称
        st2.start();//启动子线程st2，使其处于就绪(可运行)状态
        System.out.println("-----" + currentThread.getName() + "线程执行完毕-----");
    }
}
    // 定义Thread类的子类

    class calcPrimeThread extends Thread {
        int lowerLimit, upperLimit;//整数的范围区间int count=0;//控制输出换行
       int count = 0;
        //构造方法，初始化两个整数
        calcPrimeThread(int lowerLimit, int upperLimit) {
            this.lowerLimit = lowerLimit;
            this.upperLimit = upperLimit;
        }

        //重写run()方法
        public void run() {
            //保证lowerLimit<=upperLimit
            if (lowerLimit > upperLimit) {
                int temp;
                temp = lowerLimit;
                lowerLimit = upperLimit;
                upperLimit = temp;
            }
            String threadName = getName();
            //获取当前活动的子线程的名称string threadName=getName();
            System.out.println(threadName +"正在执行");
            System.out.println(threadName +"计算"+lowerLimit +"--"+upperLimit +"之间的素数如下:");
            for(int j = lowerLimit; j <=upperLimit;j++)
            {
                if (isPrime(j)) {
                    System.out.print(j + " ");
                    count++;
                    if (count % 10 == 0)//控制每行最多输出10个素数
                        System.out.println();
                }
                System.out.println("\n-----" + threadName + "执行完毕-----");
            }
        }

        //isPrime()方法判断参数i 是否为素数
        boolean isPrime(int i)
        {
            if(i==1)//1不是素数
                return false;
            else if(i==2)//2是最小的素数
                return true;
            else
            {
                for(int j=2;i<i;i++){
                if(i%j==0)
                { return false;}
            }
                return true;
            }
        }
}
